function defineProperty(obj, key, val) {
  const that = this;
  const dep = new Dep()
  Object.defineProperty(obj, key, {
    get() {
      Dep.target && dep.addDep(Dep.target)

      return val
    },
    set(newVal) {
      if (newVal !== val) {
        val = newVal
      }
      dep.update()
      //发起自定义事件
      // document.dispatchEvent(createEvent(key, newVal));
    }
  })
}
/**
 *创建自定义事件
 *
 * @param {类型} eventName
 * @param {参数} params
 * @returns
 */
function createEvent(eventName, params) {
  return new CustomEvent(eventName, {
    detail: params
  })
  /**
   * detail 初始化事件时传递的所有数据
   * bubbles 一个布尔值，指事件是否在DOM中冒泡
   * cancelBubble 别名 event.stopPropagation(). true从事件处理程序返回之前将其值设置为可以防止事件传播
   * cancelable 指示事件是否可以取消的布尔值
   */
}

